package com.zhixi.pattern.important.observerpattern;

import com.zhixi.pattern.important.observerpattern.operation.observable.Weather;
import com.zhixi.pattern.important.observerpattern.operation.observer.BaiduNews;
import com.zhixi.pattern.important.observerpattern.operation.observer.TenxunNews;

/**
 * 观察者模式/状态模式
 *
 *
 * 缺点：扩展性差，天气肯定不止下雨，晴天，下雪，新闻也不止百度，腾讯，如果全部增加呢
 *      如果加上温度，比如下雪和0度-下雪和5度之间需要……，下雪和5度-下雪和8度之间需要……
 *      那样类就非常庞大了，案例为了简单只写了一个天气观察对象
 *      当然设计模式一般都是搭配使用，没必要为了使用设计模式，而使用设计模式
 *      明明就面向过程咔咔两下就写完了，没必要非要使用面向对象而加班
 *      当然，我指的是那些需求很少发生变化，或者不会发生改变的情况下
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/18 15:20
 */
public class ObserverPattern {

    public static void main(String[] args) {
        /* 创建观察者 */
        BaiduNews baiduNews = new BaiduNews();
        TenxunNews tenxunNews = new TenxunNews();
        /* 被观察的对象：天气 */
        Weather weather = new Weather();
        /* 添加观察者 */
        weather.addObserver(baiduNews);
        weather.addObserver(tenxunNews);
        /* 天气发生变化：下雨 */
        weather.rain();
        /* 天气发生变化：晴天 */
        weather.sunny();
        /* 天气发生变化：下雪 */
        weather.snowy();
    }

}
